In diesem Modul werden die Stammdaten der Kunden verwaltet. Dabei werden eine Reihe an sensiblen und sehr sensiblen Daten gespeichert.

\subsubsection{Gespeicherte Daten}

\begin{itemize}
    \item Kunde:

    \begin{itemize}
        \item Kundennummer
        \item Vorname
        \item Nachname
        \item Geschlecht
        \item Benutzername
        \item Passwort
        \item Geburtsdatum
        \item Wohnort (PLZ)
        \item Adresse (Straße/Hausnr./Stiege/Türnr.)
        \item Telefonnummer
        \item E-Mail-Adresse
        \item Sperrung
        \item Sperrdatum
        \item Rechte
        \item Zeitpunkt der letzten Änderung
        \item Geändert durch (Benutzername)
        \item Signatur des \KM{}
        \item Signatur der \TSA{}
    \end{itemize}

    \item Service:

    \begin{itemize}
        \item IP-Adresse
        \item Rechte
        \item Zeitpunkt der letzten Änderung
        \item Geändert durch (Benutzername)
        \item Signatur des \KM{}
        \item Signatur der \TSA{}
    \end{itemize}

\end{itemize}

\subsubsection{Sicherheitsmaßnahmen}

\begin{enumerate}[resume*]
    \item \label{safepw} Aus dem Passwort wird mittels Hash-Funktion SHA-256 ein eindeutiger Hash-Wert berechnet, welcher in der Datenbank gespeichert wird. Dadurch soll verhindert werden, dass bei einer Kompromittierung der Datenbank das Passwort im Klartext gelesen werden kann.

    \item \label{lockifwrongpw} Nach viermaliger Falscheingabe des Passwortes wird ein Benutzer gesperrt und kann nur von einem Administrator wieder entsperrt werden.
\end{enumerate}

\subsubsection{Angebotene Methoden}

\begin{itemize}
    \item \texttt{registerUser}: Mit dieser Methode muss ein Service-Benutzer vom Service beim \KM{} registriert werden, bevor Anfragen von diesem Benutzer akzeptiert werden. Als Parameter müssen ein eindeutiger Benutzername, ein mittels SHA-256 gehashtes Passwort und eine Rechte-Liste übergeben werden. Die Antwort des \KM{} auf diese Anfrage ist entweder \texttt{TRUE} (Registrierung erfolgreich) oder \texttt{FALSE} (Registrierung fehlgeschlagen, d.h. Benutzername ist bereits vergeben oder ungültige Daten).

    \item \texttt{unregisterUser}: Um einen Service-Benutzer zu sperren, muss bei dieser Methode der entsprechende Benutzername übergeben werden. Im Falle einer erfolgreichen Sperre wird \texttt{TRUE} und im Falle eines Fehlers (Benutzer existiert nicht bzw. ist bereits gesperrt) \texttt{FALSE} zurückgegeben.

    \item \texttt{get}- und \texttt{set}-Methoden für alle Kundendaten Felder, etwa \texttt{getFirstName}, \texttt{getAddress} etc. Mit diesen Methoden können Kundendaten abgefragt bzw. geändert werden. Das \KM{} antwortet im Fall von \texttt{get}-Methoden mit dem entsprechenden Wert. Im Fall von \texttt{set}-Methoden gibt es keine Antwort.

    \item \texttt{insertCustomer}: Mit dieser Methode kann ein Kunde hinzugefügt werden. Als Parameter müssen für alle Kundendaten(-felder) ein Wert übergeben werden. Es wird keine Antwort auf diese Anfrage zurückübermittelt.

    \item \texttt{deleteCustomer}: Um einen Kunden zu löschen/sperren, muss als Parameter die Kundennummer übergeben werden. Der Kunde wird dabei auf gesperrt gesetzt. Es wird keine Antwort auf diese Anfrage zurückübermittelt

    \item \texttt{getTransactions}: Liefert alle Transaktionen eines Kunden zurück, als Parameter muss die Kundenummner angegeben werden. Die Abfrage läuft über die Schnittstelle zur Karten-Verwaltung (diese liefert die Transaktionen für jede Karte).

    \item Methoden für alle bei der Schnittstelle zur \KV{} definierten Methoden (mit gleichen Parameter- sowie Methoden-Verhalten und möglichen Antworten). Diese dienen dazu, die Schnittstelle der \KV{} nach außen zugänglich zu machen.
\end{itemize}

\subsubsection{Rechtesystem}

Alle Benutzer, die mit diesem System interagieren, sind einem Rechtesystem unterworfen. Jeder Benutzer muss sich zuerst authentifizieren und hat dann entsprechend seiner Rechte Zugriff auf unterschiedliche Methoden:

\begin{itemize}
    \item Lesen (umfasst \texttt{get}- und \texttt{is}-Methoden der gelisteten Felder)

    \begin{itemize}
        \item Personendaten: Kundennr, Vorname, Nachname, Geschlecht
        \item Adressdaten: Wohnort, Adresse
        \item Kontaktdaten: E-Mailadresse, Telefonnummer
        \item Passwortdaten: Passwort
        \item Sperrdaten: Sperrung, Sperrdatum
        \item Kartendaten: alle Kartendaten des Kunden
    \end{itemize}

    \item Schreiben (umfasst \texttt{set}-, \texttt{insert}- und \texttt{delete}-, \texttt{register}- und \texttt{unregister}-Methoden der gelisteten Felder)

    \begin{itemize}
        \item Benutzer hinzufügen
        \item Benutzer entfernen
        \item Kunden sperren/löschen
        \item Kunden hinzufügen
        \item Personendaten: Kundennr, Vorname, Nachname, Geschlecht
        \item Adressdaten: Wohnort, Adresse
        \item Kontaktdaten: E-Mailadresse, Telefonnummer
        \item Karten-Limit: Limit
        \item Karte sperren/löschen
        \item Karten hinzufügen
    \end{itemize}
\end{itemize}

\subsubsection{Schnittstelle zur Karten-Verwaltung}

\begin{itemize}
    \item Die \KV{} hat Zugriff auf die \texttt{get}-Methoden der folgenden Felder:

    \begin{itemize}
        \item Kundennummer
        \item Vorname
        \item Nachname
        \item Geschlecht
        \item Wohnort
        \item Adresse
    \end{itemize}

    Da die restlichen Kundendaten für die \KV{} (und im Weiteren für die \TV{}) nicht erforderlich sind, werden Anfragen von der \KV{} bezüglich dieser mit der Antwort "`Request denied"' beantwortet.
\end{itemize}

\subsubsection{Schnittstelle zur Administation/Datenabfrage}

\begin{itemize}
    \item Bei jeder Anfrage eines Service-Benutzers müssen dessen Benutzername und Passwort (als SHA-256 Hash-Wert) mitübergeben werden. Nur wenn diese Daten mit den gespeicherten Benutzernamen und Passwort übereinstimmen und der entsprechende Benutzer die entsprechenden Rechte zur Ausführung dieser Anfrage besitzt, wird die Anfrage vom \KM{} bearbeitet.

    \item Bei der Registrierung eines Benutzers muss durch das Service eine solche Rechte-Liste angegeben werden, wobei der Benutzer jedoch nicht mehr Rechte als das Service besitzen kann, das den Benutzer registriert.

    \item Handelt es sich beim Service-Benutzer um einen Kunden, so muss dieser vom Service nicht registriert werden und hat lediglich auf seine Daten Zugriff. Der Kunde hat dabei Lesezugriff auf all seine Daten, darf jedoch lediglich seine Telefonnummer, Passwort und E-Mailadresse ändern. Außerdem darf der Kunde seine Kreditkartendaten abfragen, nicht aber ändern.
\end{itemize}